home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / mxcode / sbdsp103 / mem.pas < prev    next >
Pascal/Delphi Source File  |  1994-09-10  |  3KB  |  64 lines

  1. {       SBDSP is Copyright 1994 by Ethan Brodsky.  All rights reserved.      }
  2. unit Mem;
  3.     interface
  4.         function GetBuffer(var Buffer: pointer; BufferLength: LongInt): boolean;
  5.         procedure FreeBuffer(Buffer: pointer; BufferLength: LongInt);
  6.         function GetAbsoluteAddress(p: pointer): LongInt;
  7.     implementation
  8.         function GetBuffer(var Buffer: pointer; BufferLength: LongInt): boolean;
  9.             var
  10.                 Dummy: pointer;
  11.             begin
  12.                 if MaxAvail < BufferLength
  13.                     then
  14.                         begin
  15.                             GetBuffer := false;
  16.                             Buffer := nil;
  17.                             Exit;
  18.                         end;
  19.                 GetBuffer := true;
  20.                 if BufferLength < $FFFF
  21.                     then
  22.                         GetMem(Buffer, BufferLength)
  23.                     else
  24.                         begin
  25.                             GetMem(Buffer, $FFFF);
  26.                             BufferLength := BufferLength - $FFFF;
  27.                             while BufferLength > $FFFF do
  28.                                 begin
  29.                                     GetMem(Dummy, $FFFF);
  30.                                     BufferLength := BufferLength - $FFFF;
  31.                                 end;
  32.                             GetMem(Dummy, BufferLength);
  33.                         end;
  34.             end;
  35.         procedure FreeBuffer(Buffer: pointer; BufferLength: LongInt);
  36.             var
  37.                 Dummy: pointer;
  38.                 LeftToFree: LongInt;
  39.             begin
  40.                 if BufferLength < $FFFF
  41.                     then
  42.                         FreeMem(Buffer, BufferLength)
  43.                     else
  44.                         begin
  45.                             Dummy := Buffer;
  46.                             LeftToFree := BufferLength;
  47.                             FreeMem(Buffer, $FFFF);
  48.                             LeftToFree := LeftToFree - $FFFF;
  49.                             Dummy := Ptr(Seg(Dummy^) + $1000, Ofs(Dummy^));
  50.                             while LeftToFree > $FFFF do
  51.                                 begin
  52.                                     FreeMem(Dummy, $FFFF);
  53.                                     LeftToFree := LeftToFree - $FFFF;
  54.                                     Dummy := Ptr(Seg(Dummy^) + $1000, Ofs(Dummy^));
  55.                                 end;
  56.                             FreeMem(Dummy, LeftToFree);
  57.                         end;
  58.             end;
  59.         function GetAbsoluteAddress(p: pointer): LongInt;
  60.             begin
  61.                 GetAbsoluteAddress := LongInt(Seg(p^))*16 + LongInt(Ofs(p^));
  62.             end;
  63.     end.
  64.